package anbow.ch2;

public class ReverseListDemo {

	public static void main(String[] args) {

		int[] a = {1,2,3,4};
		
		ListNode head = initList(a);
		showList(head);
		System.out.println("-------------------------");
		ListNode h = reverseList(head);
		showList(h);	
		
		
	}	
	
	//根据给定的整型数组，创建一个不带头节点的链表
	public static ListNode initList(int[] a) {
		ListNode head = new ListNode(a[0]);
		ListNode h= head;
		
		for(int i=1;i<a.length;i++) {
			ListNode p = new ListNode(a[i]);
			h.next = p;
			h=p;
		}
		return head;		
	}
	
	//遍历给定的链表，输出每个结点的值
	public static void showList(ListNode head) {
		ListNode p = head;
		while(p!=null) {
			System.out.println(p.val);
			p = p.next;
		}
	}
	
	/**
	 * 将指定链表进行反转，使用一个头节点
	 * @param head
	 * @return
	 */
	public static ListNode reverseList(ListNode head) {		
		ListNode h = new ListNode();
		ListNode p = head;
		while(p != null) {
			ListNode q = p.next;
			p.next = h.next;
			h.next =p;
			p = q;
		}
		return h.next;
	}

}























